package fr.capsuleaube.android.bean;

import android.os.Parcel;
import android.os.Parcelable;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;

import fr.capsuleaube.android.utils.UrlComparator;

public class Capsule implements Parcelable {

    public static final Parcelable.Creator<Capsule> CREATOR = new Parcelable.Creator<Capsule>() {
        @Override
        public Capsule createFromParcel(Parcel source) {
            return new Capsule(source);
        }

        @Override
        public Capsule[] newArray(int size) {
            return new Capsule[size];
        }
    };
    private Integer id;
    private ArrayList<URL> photoList = new ArrayList<URL>();
    private ArrayList<String> colorList = new ArrayList<String>();

    public Capsule() {

    }

    private Capsule(Parcel in) {

        ArrayList<String> lPhotoListString = new ArrayList<String>();

        id = in.readInt();
        in.readStringList(lPhotoListString);
        in.readStringList(colorList);

        for (String s : lPhotoListString) {
            try {
                URL u = new URL(s);
                this.addPhoto(u);
            } catch (MalformedURLException e) {
                // Ignore les URL malformées
            }
        }
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public ArrayList<URL> getPhotoList() {
        // Hack pour ne retourner qu'une seule photo même s'il y en a plusieurs
        // Le code ne gère pas correctement les photos multiples
        return (new ArrayList<URL>() {
            {
                add(photoList.get(0));
            }
        });
        //return photoList;
    }

    public void addPhoto(URL url) {
        this.photoList.add(url);

        // Trie les URL par ordre alphabétique pour figer l'ordre d'apparition des photos
        Collections.sort(photoList, new UrlComparator());
    }

    public ArrayList<String> getColorList() {
        return colorList;
    }

    public void setColorList(ArrayList<String> colorList) {
        this.colorList = colorList;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel parcel, int flags) {

        ArrayList<String> lPhotoListString = new ArrayList<String>();

        for (URL u : photoList) {
            lPhotoListString.add(u.toString());
        }

        parcel.writeInt(id);
        parcel.writeStringList(lPhotoListString);
        parcel.writeStringList(colorList);
    }
}
